package com.qf.common.core.util;

/**
 * 天--道--酬--勤
 *
 * @author LiangGaoQiang
 * @ClassName JwtUtils
 * @Date: 2025/5/22 11:15
 * @Description: 描述
 */

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

/**
 * jwt工具类
 * @author GaoQiangLiang
 */
public class JwtUtils {
    // 密钥
    private final static String secret = "aimei123456789";

    /**
     * 生成jwt
     *
     * @param claims 载荷
     * @return
     */
    public static String createJwt(Map<String, Object> claims) {

        // 签名算法，表示sha256
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

        //构造jwt
        JwtBuilder builder = Jwts.builder()
                // 设置载荷
                .setClaims(claims)
                // 设置过期时间
                .setExpiration(new Date(System.currentTimeMillis() + 10000000))
                // 使用指定算法设置签名
                .signWith(signatureAlgorithm, secret);
        //生成jwt
        return builder.compact();
    }

    /**
     * 解析，如果不符合，报异常
     *
     * @param jsonWebToken
     * @return
     */
    public static Claims parseJWT(String jsonWebToken) {
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(secret)
                    .parseClaimsJws(jsonWebToken).getBody();
            return claims;
        } catch (Exception ex) {
            throw new RuntimeException(ex.getMessage());
        }
    }


    /**
     * 删除jwt-token缓存（实际是加入黑名单）
     * @param token jwt-token
     */
    public static void removeJwt(String token) {
        Date expiration;
        expiration = new Date(System.currentTimeMillis() + 1000);
        // 将token加入黑名单，并设置100ms过期时间
        BlacklistCache.add(token, expiration);
    }

    public static boolean isBlacklisted(String token) {
        return BlacklistCache.contains(token);
    }

}
